package cn.fanyamin.dao.ibatis;

import java.util.List;

import cn.fanyamin.business.NoResultsFoundException;
import cn.fanyamin.dao.ModuleDao;
import cn.fanyamin.domain.Module;



public class SqlMapModuleDao extends CRUDDao<Integer,Module> implements ModuleDao {
	protected String domainName = "Module";
	
	public SqlMapModuleDao() {
		setSQLID(domainName);
	}

	public List<Module> getModuleList(int roleID) {
		List<Module> list = (List<Module>) getSqlMapClientTemplate().queryForList(
				"getModuleList", roleID);
		if (null == list) {
			throw new NoResultsFoundException("getModuleList");
		}

		return Module.tidyModules(list);
	}
	
	public List<Module> getSubModuleList(int moduleID) {
		List<Module> list = (List<Module>) getSqlMapClientTemplate().queryForList(
				"getSubModuleList", moduleID);
		if (null == list) {
			throw new NoResultsFoundException("getSubModuleList");
		}

		return list;
	}
	
	public List<Module> getAllModuleList() {
		List<Module> list = (List<Module>) getSqlMapClientTemplate().queryForList(
				"getAllModuleList");
		if (null == list) {
			throw new NoResultsFoundException("getAllModuleLists");
		}
		
		return Module.tidyModules(list);
	}
	
	public List<Module> getFavoriteModules(int userID) {
		List<Module> list = (List<Module>) getSqlMapClientTemplate().queryForList(
				"getFavoriteModules", userID);
		if (null == list) {
			throw new NoResultsFoundException("getFavoriteModules");
		}

		return list;
	}
	
	public Module retrieve(int id) {
		Module ret = (Module) getSqlMapClientTemplate().queryForObject(
				RETRIEVE_SQLID, id);

		List<Module> subModuleList = this.getSubModuleList(ret.getModuleID());
		ret.setSubModuleList(subModuleList);
		
		if (null == ret) {
			throw new NoResultsFoundException(RETRIEVE_SQLID + ", id=" + id);
		}

		return ret;
	}
}
